﻿using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Diagnostics.CodeAnalysis;

namespace EasyDDD.Domain
{

    //public record Key<T>([NotNull] T Value) : IKey<T>;

    public record Key<T> : IKey<T>
    {
        public Key()
        {
        }

        public Key(T value)
        {
            Value = value;
        }

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Column(Order = 0)]
        [NotNull]
        public T Value { get; } = default!;
    }

    //public record KeyInt : IKey
    //{
    //    public KeyInt()
    //    {
    //    }

    //    public KeyInt(int value)
    //    {
    //        Value = value;
    //    }

    //    [Key]
    //    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    //    [Column(Order = 0)]
    //    [NotNull]
    //    public int Value { get; } = default!;
    //}
    //public record KeyLong : IKey
    //{
    //    public KeyLong()
    //    {
    //    }

    //    public KeyLong(long value)
    //    {
    //        Value = value;
    //    }

    //    [Key]
    //    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    //    [Column(Order = 0)]
    //    [NotNull]
    //    public long Value { get; } = default!;
    //}

    //public record KeyGuid : IKey
    //{
    //    public KeyGuid()
    //    {
    //    }

    //    public KeyGuid(Guid value)
    //    {
    //        Value = value;
    //    }

    //    [Key]
    //    //[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    //    [Column(Order = 0)]
    //    [NotNull]
    //    public Guid Value { get; } = default!;
    //}

    //public record KeyStrong : IKey
    //{
    //    public KeyStrong()
    //    {
    //    }

    //    public KeyStrong(string value)
    //    {
    //        Value = value;
    //    }

    //    [Key]
    //    //[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    //    [Column(Order = 0)]
    //    [NotNull]
    //    public string Value { get; } = default!;
    //}
}
